/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.reportes;

import com.camachosanchez.reportes.bean.InformacionUnidad;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.ReportUtil;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.util.List;

/**
 *
 * @author Rolando
 */
public class _ReporteInformacionUnidad {

    public static String generarReporte(InformacionUnidad informacion) {
        String rutaArchivo = "reportes/informacion_unidad_" + GUIUtil.obtenerFechaDDMMYYYHHMMSS() + ".pdf";
        try {
            PdfPCell cell;
            Document document = new Document(PageSize.A4, 20, 20, 20, 20);
            PdfWriter.getInstance(document, new FileOutputStream(rutaArchivo));
            document.open();
            Paragraph paragraph = new Paragraph();
            paragraph.setAlignment(Element.ALIGN_CENTER);
            document.add(ReportUtil.obtenerCabeceraTabla("INFORMACIÓN DE UNIDAD"));
            document.add(new Paragraph("\n"));
            PdfPTable table = new PdfPTable(6);
            table.setWidthPercentage(100);
            table.setWidths(new float[]{1f, 2f, 1.5f, 1.5f, 1.5f, 1.5f});
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Placa:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getPlaca(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Código:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getCodigo(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Marca:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getMarca(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Serie:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getSerie(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Nro. Motor:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getNumeroMotor(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Tipo", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getTipo(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Tanque (L):", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getTanqueLitros(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Fecha de Compra:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getFechaCompra(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Distribuidor:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getDistribuidor(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Piloto:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getPiloto(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Patio:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getPatio(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Ejes:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getEjes(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Carga (Kg):", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getCargaKilogramos(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Carga (m3):", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getCargarVolumen(), Constantes.fuenteCuerpo, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde("Fecha de Registro:", Constantes.fuenteEtiqueta, 1));
            table.addCell(ReportUtil.obtenerCeldaSinBorde(informacion.getFechaRegistro(), Constantes.fuenteCuerpo, 1));
            document.add(table);
            document.add(new Paragraph("\n"));
            PdfPTable tablaNeumaticos = new PdfPTable(7);
            tablaNeumaticos.setWidthPercentage(100);
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("NEUMÁTICOS", Constantes.fuenteTitulos, 7));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("POSICIÓN", Constantes.fuenteTitulos, 1));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("CÓDIGO", Constantes.fuenteTitulos, 1));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("SERIE", Constantes.fuenteTitulos, 1));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("MARCA", Constantes.fuenteTitulos, 1));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("MEDIDA", Constantes.fuenteTitulos, 1));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("TIPO DE PISO", Constantes.fuenteTitulos, 1));
            tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla("R", Constantes.fuenteTitulos, 1));
            List<String[]> listaNeumaticos = informacion.getNeumaticos();
            if (listaNeumaticos != null) {
                for (String[] strings : listaNeumaticos) {
                    if (strings.length == 7) {
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[0], Constantes.fuenteCuerpo, 1));
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[1], Constantes.fuenteCuerpo, 1));
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[2], Constantes.fuenteCuerpo, 1));
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[3], Constantes.fuenteCuerpo, 1));
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[4], Constantes.fuenteCuerpo, 1));
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[5], Constantes.fuenteCuerpo, 1));
                        tablaNeumaticos.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[6], Constantes.fuenteCuerpo, 1));
                    }
                }
            }
            document.add(tablaNeumaticos);
            document.add(new Paragraph("\n"));
            PdfPTable tablaBaterias = new PdfPTable(4);
            tablaBaterias.setWidthPercentage(100);
            tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla("BATERÍAS", Constantes.fuenteTitulos, 4));
            tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla("POSICIÓN", Constantes.fuenteTitulos, 1));
            tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla("CÓDIGO", Constantes.fuenteTitulos, 1));
            tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla("MARCA", Constantes.fuenteTitulos, 1));
            tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla("PLACAS", Constantes.fuenteTitulos, 1));
            List<String[]> listaBaterias = informacion.getBaterias();
            if (listaBaterias != null) {
                for (String[] strings : listaBaterias) {
                    if (strings.length == 4) {
                        tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[0], Constantes.fuenteCuerpo, 1));
                        tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[1], Constantes.fuenteCuerpo, 1));
                        tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[2], Constantes.fuenteCuerpo, 1));
                        tablaBaterias.addCell(ReportUtil.obtenerCeldaCabeceraTabla(strings[3], Constantes.fuenteCuerpo, 1));
                    }
                }
            }
            document.add(tablaBaterias);
            document.add(new Paragraph("\n"));
            PdfPTable tablaComentarios = new PdfPTable(1);
            tablaComentarios.setWidthPercentage(100);
            Chunk chunk = new Chunk("OBSERVACIONES:", Constantes.fuenteEtiqueta);
            cell = new PdfPCell(new Phrase(chunk));
            tablaComentarios.addCell(cell);
            tablaComentarios.addCell(ReportUtil.obtenerCeldaCabeceraTabla(" ", Constantes.fuenteEtiqueta, 1));
            tablaComentarios.addCell(ReportUtil.obtenerCeldaCabeceraTabla(" ", Constantes.fuenteEtiqueta, 1));
            document.add(tablaComentarios);
            
            
            document.add(new Paragraph("\n"));
            document.add(new Paragraph("\n"));
            PdfPTable tablaFirmas = new PdfPTable(3);
            tablaFirmas.addCell(ReportUtil.obtenerCeldaSinBorde("", Constantes.fuenteCuerpo, 1));
            tablaFirmas.addCell(ReportUtil.obtenerCeldaSinBorde("", Constantes.fuenteCuerpo, 1));
            tablaFirmas.addCell(ReportUtil.obtenerCeldaSinBorde("", Constantes.fuenteCuerpo, 1));
            chunk = new Chunk("Revisado por: " + GUIUtil.getNombreEncargado(), Constantes.fuenteCuerpo);
            cell = new PdfPCell(new Phrase(chunk));
            cell.setBorder(1);
            cell.setRowspan(2);
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            tablaFirmas.addCell(cell);

            chunk = new Chunk("", Constantes.fuenteCuerpo);
            cell = new PdfPCell(new Phrase(chunk));
            cell.setBorder(0);
            cell.setRowspan(2);
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            tablaFirmas.addCell(cell);

            chunk = new Chunk("Chofer: " + informacion.getPiloto(), Constantes.fuenteCuerpo);
            cell = new PdfPCell(new Phrase(chunk));
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            cell.setBorder(1);
            tablaFirmas.addCell(cell);
            tablaFirmas.addCell(ReportUtil.obtenerCeldaSinBorde("Cédula:", Constantes.fuenteCuerpo, 1));

            document.add(tablaFirmas);
            document.add(new Paragraph("\n"));
            chunk = new Chunk("Declaro que recibo los bienes aquí detallados para uso exclusivo de la compañía y que soy responsable de su custodia. Conozco que de haber perdida o daño de los mismos,  deberé responder económicamente por ellos sin perjuicio de las acciones legales que la empresa desee emprender si lo cree pertinente.", Constantes.fuenteCuerpo);
            document.add(new Paragraph(chunk));
            
            document.close();
        } catch (Exception e) {
            rutaArchivo = null;
        } finally {
            return rutaArchivo;
        }
    }
}
